Skip to content

feat: add Docker support and comprehensive test coverage#12

Merged
guibranco merged 7 commits into
mainfrom
feature/add-more-tests-and-docker-support
May 7, 2026
Merged

feat: add Docker support and comprehensive test coverage#12
guibranco merged 7 commits into
mainfrom
feature/add-more-tests-and-docker-support

Conversation

@guibranco

@guibranco guibranco commented May 7, 2026

Copy link
Copy Markdown
Owner

πŸ“‘ Description

Introduce Docker setup with a Dockerfile for building the Grimoire API service and a docker-compose.yml for local development. This setup improves the development environment's consistency and ease of use.

Update project files and dependencies to .NET 10, ensuring latest features and performance enhancements. Added .dockerignore to optimize Docker builds by excluding unneeded files.

Enhance testing coverage with the addition of end-to-end (E2E), integration, and unit tests using xUnit. These tests verify application functionality, reducing bugs and ensuring robust code changes. Added infrastructure for Testcontainers for isolated DB testing environments.

Modified SecretRepository to handle EF Core 10's limitations with nullable timestamp comparisons in SQL, improving query reliability for determining active secret versions.

βœ… Checks

  • My pull request adheres to the code style of this project
  • My code requires changes to the documentation
  • I have updated the documentation as required
  • All the tests have passed

☒️ Does this introduce a breaking change?

  • Yes
  • No

Summary by Sourcery

Add containerization and health-check support for the API and significantly expand automated test coverage, including integration and E2E flows, while improving secret version querying compatibility with EF Core 10.

New Features:

  • Add Dockerfile and docker-compose setup for running the Grimoire API in Docker with a health endpoint.
  • Expose a /health endpoint and register health checks in the API for readiness and liveness probing.

Bug Fixes:

  • Adjust SecretRepository active version selection to work around EF Core 10 translation limitations for nullable timestamp filters.

Enhancements:

  • Mark Program as partial to support WebApplicationFactory-based integration testing.

Build:

  • Introduce .dockerignore and Docker-based build/publish pipeline for the API container image.

Tests:

  • Add extensive integration, end-to-end, and unit tests covering applications, environments, secrets, configurations, authentication, validators, slugs, and consumer APIs.
  • Introduce reusable integration test fixtures and helpers, including Testcontainers-based E2E setup and WebApplicationFactory-based in-memory hosting.

Introduce Docker setup with a Dockerfile for building the
Grimoire API service and a docker-compose.yml for local
development. This setup improves the development environment's
consistency and ease of use.

Update project files and dependencies to .NET 10, ensuring
latest features and performance enhancements. Added .dockerignore
to optimize Docker builds by excluding unneeded files.

Enhance testing coverage with the addition of end-to-end (E2E),
integration, and unit tests using xUnit. These tests verify
application functionality, reducing bugs and ensuring robust
code changes. Added infrastructure for Testcontainers for
isolated DB testing environments.

Modified SecretRepository to handle EF Core 10's limitations
with nullable timestamp comparisons in SQL, improving query
reliability for determining active secret versions.
@sourcery-ai

sourcery-ai Bot commented May 7, 2026

Copy link
Copy Markdown

Reviewer's Guide

Adds Docker build/runtime support, health checks, and extensive automated coverage (unit, integration, and E2E) while slightly refactoring secret version retrieval for EF Core 10 compatibility.

Sequence diagram for SecretRepository.GetActiveVersionAsync two-stage filtering

sequenceDiagram
    participant caller as Caller
    participant repo as SecretRepository
    participant dbctx as GrimoireDbContext
    participant db as Database

    caller->>repo: GetActiveVersionAsync(secretId, environmentId, now, ct)
    repo->>dbctx: SecretVersions.Where(SecretId, EnvironmentId, IsEnabled)
    dbctx->>db: Execute SQL on indexable columns
    db-->>dbctx: Candidate rows ordered by Version desc
    dbctx-->>repo: List of SecretVersion candidates
    repo->>repo: In-memory filter on NotBefore and ExpiresAt vs now
    repo-->>caller: SecretVersion activeVersion or null
Loading

Class diagram for SecretRepository and new test infrastructure

classDiagram
    class SecretRepository {
        +Task~List~SecretVersion~~ GetVersionsAsync(Guid secretId, Guid environmentId, CancellationToken ct)
        +Task~SecretVersion?~ GetActiveVersionAsync(Guid secretId, Guid environmentId, DateTimeOffset now, CancellationToken ct)
        +Task~int~ GetNextVersionNumberAsync(Guid secretId, Guid environmentId, CancellationToken ct)
    }

    class Program {
        <<partial>>
    }

    class WebApplicationFactoryOfProgram {
        <<external>>
    }

    class GrimoireWebApplicationFactory {
        +GrimoireWebApplicationFactory()
        +ConfigureWebHost(IWebHostBuilder builder)
    }

    class GrimoireApiFixture {
        +Task InitializeAsync()
        +Task DisposeAsync()
        +HttpClient CreateClient()
    }

    class IntegrationTestsAssembly {
        <<tests>>
    }

    class E2eTestsAssembly {
        <<tests>>
    }

    GrimoireWebApplicationFactory --|> WebApplicationFactoryOfProgram
    IntegrationTestsAssembly --> GrimoireWebApplicationFactory : uses
    E2eTestsAssembly --> GrimoireApiFixture : uses
    GrimoireApiFixture --> Program : starts Dockerized API
    SecretRepository --> Program : used within API dependency injection
Loading

File-Level Changes

Change Details Files
Refactor active secret version lookup to work around EF Core 10 SQLite translation issues by splitting the query into SQL-filtered candidates and in-memory time-window evaluation.
  • Change GetActiveVersionAsync from a single translated LINQ query to an async method that first filters by secret, environment, and IsEnabled in the database.
  • Load candidate versions ordered by Version descending into memory before applying NotBefore/ExpiresAt window checks.
  • Document the rationale (nullable DateTimeOffset OR expressions not translatable by EF Core 10 SQLite provider).
src/Grimoire.Infrastructure/Persistence/Repositories/SecretRepository.cs
Expose and wire up ASP.NET Core health checks to support Docker health probes and E2E tests.
  • Register health checks in the service container.
  • Map a /health endpoint on the app pipeline.
  • Make Program partial to allow WebApplicationFactory usage in integration tests.
src/Grimoire.Api/Program.cs
Introduce Docker build and local development workflow for the API using multi-stage Dockerfile and docker-compose.
  • Add multi-stage Dockerfile targeting .NET 10 SDK/runtime, restoring and publishing the API and configuring default connection string to a file-backed SQLite DB under /data.
  • Expose port 8080 and configure ASPNETCORE_URLS accordingly.
  • Add docker-compose service that builds the image, configures env vars (admin key, master key, CORS), maps 8080, mounts a named volume for data, and defines a curl-based healthcheck against /health.
  • Add .dockerignore to avoid copying unnecessary files into Docker build context.
Dockerfile
docker-compose.yml
.dockerignore
Add a comprehensive automated test suite including validator unit tests, integration tests over in-process ASP.NET Core host, and containerized end-to-end tests using Testcontainers.
  • Introduce GrimoireWebApplicationFactory that configures a Testing environment, in-memory configuration, SQLite file DB, and convenience HTTP clients for management and consumer APIs.
  • Add shared TestHelpers for creating applications, environments, secrets, and reading JSON responses.
  • Add unit tests for validators (Create/Update Application, Environment, Secret, SetSecretValue, Configuration DTOs) to assert both valid and invalid cases.
  • Add unit tests for SlugService.Generate to cover normalization, casing, whitespace, special characters, and dash de-duplication.
  • Add integration tests for authentication behavior on management and consumer APIs, including success/failure auth flows and health endpoint behavior.
  • Add integration tests for management endpoints (applications, environments, configurations, secrets) covering CRUD, conflict, and NotFound scenarios.
  • Add integration tests for consumer endpoints (secrets and configurations) ensuring correct success, 404 cases, and semantics (latest version, enabled, environment existence).
  • Introduce GrimoireApiFixture that builds/runs the Docker image via Testcontainers, waits on /health, wires environment variables, and exposes management/consumer clients for E2E tests.
  • Add E2E tests covering health, full app/secret/config lifecycles, authentication enforcement, and key rotation behavior.
  • Add project files for new test projects.
tests/Grimoire.IntegrationTests/GrimoireWebApplicationFactory.cs
tests/Grimoire.IntegrationTests/TestHelpers.cs
tests/Grimoire.IntegrationTests/AuthenticationTests.cs
tests/Grimoire.IntegrationTests/Management/ApplicationsTests.cs
tests/Grimoire.IntegrationTests/Management/EnvironmentsTests.cs
tests/Grimoire.IntegrationTests/Management/ConfigurationsTests.cs
tests/Grimoire.IntegrationTests/Management/SecretsTests.cs
tests/Grimoire.IntegrationTests/Consumer/ConsumerSecretsTests.cs
tests/Grimoire.IntegrationTests/Consumer/ConsumerConfigurationsTests.cs
tests/Grimoire.E2eTests/GrimoireApiFixture.cs
tests/Grimoire.E2eTests/E2eTests.cs
tests/Grimoire.Tests/ValidatorTests.cs
tests/Grimoire.Tests/SlugServiceTests.cs
tests/Grimoire.E2eTests/Grimoire.E2eTests.csproj
tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj
tests/Grimoire.Tests/Grimoire.Tests.csproj
Grimoire.slnx
src/Grimoire.Api/Grimoire.Api.csproj
src/Grimoire.Consumer/Grimoire.Consumer.csproj
src/Grimoire.Core/Grimoire.Core.csproj
src/Grimoire.Infrastructure/Grimoire.Infrastructure.csproj

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@guibranco guibranco enabled auto-merge (squash) May 7, 2026 13:55
@gstraccini gstraccini Bot added the β˜‘οΈ auto-merge Automatic merging of pull requests (gstraccini-bot) label May 7, 2026
@coderabbitai

coderabbitai Bot commented May 7, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@guibranco has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 23 minutes and 51 seconds before requesting another review.

To continue reviewing without waiting, purchase usage credits in the billing tab.

βŒ› How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
βš™οΈ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fe577b08-33ab-43f1-9e15-1afbf2f7ec4c

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between a005468 and b0b3a93.

πŸ“’ Files selected for processing (28)
  • .dockerignore
  • .github/workflows/build.yml
  • Dockerfile
  • Grimoire.slnx
  • docker-compose.yml
  • src/Grimoire.Api/Controllers/Management/ApplicationsController.cs
  • src/Grimoire.Api/Grimoire.Api.csproj
  • src/Grimoire.Api/Program.cs
  • src/Grimoire.Consumer/Grimoire.Consumer.csproj
  • src/Grimoire.Core/Grimoire.Core.csproj
  • src/Grimoire.Infrastructure/Grimoire.Infrastructure.csproj
  • src/Grimoire.Infrastructure/Persistence/Repositories/SecretRepository.cs
  • tests/Grimoire.E2eTests/E2eTests.cs
  • tests/Grimoire.E2eTests/Grimoire.E2eTests.csproj
  • tests/Grimoire.E2eTests/GrimoireApiFixture.cs
  • tests/Grimoire.IntegrationTests/AuthenticationTests.cs
  • tests/Grimoire.IntegrationTests/Consumer/ConsumerConfigurationsTests.cs
  • tests/Grimoire.IntegrationTests/Consumer/ConsumerSecretsTests.cs
  • tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj
  • tests/Grimoire.IntegrationTests/GrimoireWebApplicationFactory.cs
  • tests/Grimoire.IntegrationTests/Management/ApplicationsTests.cs
  • tests/Grimoire.IntegrationTests/Management/ConfigurationsTests.cs
  • tests/Grimoire.IntegrationTests/Management/EnvironmentsTests.cs
  • tests/Grimoire.IntegrationTests/Management/SecretsTests.cs
  • tests/Grimoire.IntegrationTests/TestHelpers.cs
  • tests/Grimoire.Tests/Grimoire.Tests.csproj
  • tests/Grimoire.Tests/SlugServiceTests.cs
  • tests/Grimoire.Tests/ValidatorTests.cs
✨ Finishing Touches
πŸ§ͺ Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/add-more-tests-and-docker-support

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❀️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

# Conflicts:
#	src/Grimoire.Api/Grimoire.Api.csproj
#	src/Grimoire.Consumer/Grimoire.Consumer.csproj
#	src/Grimoire.Core/Grimoire.Core.csproj
#	src/Grimoire.Infrastructure/Grimoire.Infrastructure.csproj
#	src/Grimoire.Infrastructure/Persistence/Repositories/SecretRepository.cs
#	tests/Grimoire.Tests/Grimoire.Tests.csproj
@penify-dev

penify-dev Bot commented May 7, 2026

Copy link
Copy Markdown

Failed to generate code suggestions for PR

@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown

πŸ”₯ Formatting issues detected

File Line
./src/Grimoire.Infrastructure/Persistence/Repositories/SecretRepository.cs 9
./tests/Grimoire.IntegrationTests/TestHelpers.cs 11
./tests/Grimoire.IntegrationTests/Consumer/ConsumerConfigurationsTests.cs 17
./tests/Grimoire.IntegrationTests/GrimoireWebApplicationFactory.cs 12
./tests/Grimoire.IntegrationTests/Management/ApplicationsTests.cs 25
./tests/Grimoire.IntegrationTests/Management/SecretsTests.cs 31
./tests/Grimoire.IntegrationTests/Management/EnvironmentsTests.cs 31
./tests/Grimoire.Tests/ValidatorTests.cs 20
./tests/Grimoire.IntegrationTests/Consumer/ConsumerSecretsTests.cs 17
./tests/Grimoire.E2eTests/GrimoireApiFixture.cs 41
./tests/Grimoire.E2eTests/E2eTests.cs 10
./tests/Grimoire.IntegrationTests/Management/ConfigurationsTests.cs 32

⚑ Please run dotnet csharpier . locally to fix the formatting issues.

@socket-security

socket-security Bot commented May 7, 2026

Copy link
Copy Markdown

@socket-security

socket-security Bot commented May 7, 2026

Copy link
Copy Markdown

Caution

Review the following alerts detected in dependencies.

According to your organization's Security Policy, you must resolve all "Block" alerts before proceeding. Learn more about Socket for GitHub.

Action Severity Alert  (click "β–Ά" to expand/collapse)
Block Medium
Network access: nuget docker.dotnet.x509

Location: Package overview

From: tests/Grimoire.E2eTests/Grimoire.E2eTests.csproj β†’ nuget/testcontainers@3.10.0 β†’ nuget/docker.dotnet.x509@3.125.15

β„Ή Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/docker.dotnet.x509@3.125.15. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget docker.dotnet.x509

Location: Package overview

From: tests/Grimoire.E2eTests/Grimoire.E2eTests.csproj β†’ nuget/testcontainers@3.10.0 β†’ nuget/docker.dotnet.x509@3.125.15

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/docker.dotnet.x509@3.125.15. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: nuget docker.dotnet

Location: Package overview

From: tests/Grimoire.E2eTests/Grimoire.E2eTests.csproj β†’ nuget/testcontainers@3.10.0 β†’ nuget/docker.dotnet@3.125.15

β„Ή Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/docker.dotnet@3.125.15. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
System shell access: nuget docker.dotnet

Location: Package overview

From: tests/Grimoire.E2eTests/Grimoire.E2eTests.csproj β†’ nuget/testcontainers@3.10.0 β†’ nuget/docker.dotnet@3.125.15

β„Ή Read more on: This package | This alert | What is shell access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should avoid accessing the shell which can reduce portability, and make it easier for malicious shell access to be introduced.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/docker.dotnet@3.125.15. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget docker.dotnet

Location: Package overview

From: tests/Grimoire.E2eTests/Grimoire.E2eTests.csproj β†’ nuget/testcontainers@3.10.0 β†’ nuget/docker.dotnet@3.125.15

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/docker.dotnet@3.125.15. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.aspnetcore.mvc.testing

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.aspnetcore.mvc.testing@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
System shell access: nuget microsoft.build.framework

Location: Package overview

From: src/Grimoire.Api/Grimoire.Api.csproj β†’ nuget/microsoft.entityframeworkcore.design@10.0.7 β†’ nuget/microsoft.build.framework@18.0.2

β„Ή Read more on: This package | This alert | What is shell access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should avoid accessing the shell which can reduce portability, and make it easier for malicious shell access to be introduced.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.build.framework@18.0.2. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.build.framework

Location: Package overview

From: src/Grimoire.Api/Grimoire.Api.csproj β†’ nuget/microsoft.entityframeworkcore.design@10.0.7 β†’ nuget/microsoft.build.framework@18.0.2

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.build.framework@18.0.2. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
System shell access: nuget microsoft.codeanalysis.common

Location: Package overview

From: src/Grimoire.Api/Grimoire.Api.csproj β†’ nuget/microsoft.entityframeworkcore.design@10.0.7 β†’ nuget/microsoft.codeanalysis.common@5.0.0

β„Ή Read more on: This package | This alert | What is shell access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should avoid accessing the shell which can reduce portability, and make it easier for malicious shell access to be introduced.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.codeanalysis.common@5.0.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
System shell access: nuget microsoft.codeanalysis.workspaces.msbuild

Location: Package overview

From: src/Grimoire.Api/Grimoire.Api.csproj β†’ nuget/microsoft.entityframeworkcore.design@10.0.7 β†’ nuget/microsoft.codeanalysis.workspaces.msbuild@5.0.0

β„Ή Read more on: This package | This alert | What is shell access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should avoid accessing the shell which can reduce portability, and make it easier for malicious shell access to be introduced.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.codeanalysis.workspaces.msbuild@5.0.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.codeanalysis.workspaces.msbuild

Location: Package overview

From: src/Grimoire.Api/Grimoire.Api.csproj β†’ nuget/microsoft.entityframeworkcore.design@10.0.7 β†’ nuget/microsoft.codeanalysis.workspaces.msbuild@5.0.0

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.codeanalysis.workspaces.msbuild@5.0.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Native binaries present: nuget microsoft.codeanalysis.workspaces.msbuild

Location: Package overview

From: src/Grimoire.Api/Grimoire.Api.csproj β†’ nuget/microsoft.entityframeworkcore.design@10.0.7 β†’ nuget/microsoft.codeanalysis.workspaces.msbuild@5.0.0

β„Ή Read more on: This package | This alert | Why is native code a concern?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Verify that the inclusion of native code is expected and necessary for this package's functionality. If it is unnecessary or unexpected, consider using alternative packages without native code to mitigate potential risks.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.codeanalysis.workspaces.msbuild@5.0.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
System shell access: nuget microsoft.extensions.caching.memory

Location: Package overview

From: src/Grimoire.Api/Grimoire.Api.csproj β†’ nuget/microsoft.entityframeworkcore.sqlite@10.0.7 β†’ nuget/microsoft.entityframeworkcore.design@10.0.7 β†’ nuget/microsoft.entityframeworkcore.inmemory@10.0.7 β†’ nuget/microsoft.extensions.caching.memory@10.0.7

β„Ή Read more on: This package | This alert | What is shell access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should avoid accessing the shell which can reduce portability, and make it easier for malicious shell access to be introduced.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.caching.memory@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.configuration.commandline

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.configuration.commandline@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.configuration.commandline@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.configuration.environmentvariables

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.configuration.environmentvariables@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.configuration.environmentvariables@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.configuration.usersecrets

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.configuration.usersecrets@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.configuration.usersecrets@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.diagnostics

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.diagnostics@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.diagnostics@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
System shell access: nuget microsoft.extensions.hosting

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.hosting@10.0.7

β„Ή Read more on: This package | This alert | What is shell access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should avoid accessing the shell which can reduce portability, and make it easier for malicious shell access to be introduced.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.hosting@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.hosting

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.hosting@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.hosting@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.logging.configuration

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.logging.configuration@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.logging.configuration@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Network access: nuget microsoft.extensions.logging.console

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.logging.console@10.0.7

β„Ή Read more on: This package | This alert | What is network access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should remove all network access that is functionally unnecessary. Consumers should audit network access to ensure legitimate use.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.logging.console@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
System shell access: nuget microsoft.extensions.logging.console

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.logging.console@10.0.7

β„Ή Read more on: This package | This alert | What is shell access?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should avoid accessing the shell which can reduce portability, and make it easier for malicious shell access to be introduced.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.logging.console@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.logging.console

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.logging.console@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.logging.console@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.logging.debug

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.logging.debug@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.logging.debug@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Block Medium
Dynamic code execution: nuget microsoft.extensions.logging.eventlog

Location: Package overview

From: tests/Grimoire.IntegrationTests/Grimoire.IntegrationTests.csproj β†’ nuget/microsoft.aspnetcore.mvc.testing@10.0.7 β†’ nuget/microsoft.extensions.logging.eventlog@10.0.7

β„Ή Read more on: This package | This alert | What is dynamic code execution?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Avoid packages that use dynamic code execution like eval(), since this could potentially execute any code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore nuget/microsoft.extensions.logging.eventlog@10.0.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

See 51 more rows in the dashboard

View full report

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 4 issues, and left some high level feedback:

  • In SecretRepository.GetActiveVersionAsync, you now materialize all candidate versions into a list before applying the date filters; consider switching to AsEnumerable() and applying the date-based FirstOrDefault on the resulting sequence to avoid allocating a full list and to keep the logic streaming.
  • In the Dockerfile, the ENV line sets ConnectionStrings__Default with surrounding quotes ("Data Source=/data/grimoire.db"), which Docker treats as part of the value; you may want to remove the quotes so the connection string is parsed correctly by .NET.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In SecretRepository.GetActiveVersionAsync, you now materialize all candidate versions into a list before applying the date filters; consider switching to AsEnumerable() and applying the date-based FirstOrDefault on the resulting sequence to avoid allocating a full list and to keep the logic streaming.
- In the Dockerfile, the ENV line sets ConnectionStrings__Default with surrounding quotes ("Data Source=/data/grimoire.db"), which Docker treats as part of the value; you may want to remove the quotes so the connection string is parsed correctly by .NET.

## Individual Comments

### Comment 1
<location path="Dockerfile" line_range="16" />
<code_context>
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
+WORKDIR /app
+
+RUN mkdir -p /data && chmod 777 /data
+
+EXPOSE 8080
</code_context>
<issue_to_address>
**🚨 suggestion (security):** Relaxed `chmod 777` on `/data` is overly permissive and could be tightened.

World-writable permissions on `/data` are broader than necessary and weaken the container’s security posture. Where possible, run the app as a non-root user and set ownership and permissions for that user only (e.g., `chown` to a dedicated UID/GID and use something like `chmod 750`). This keeps the volume writable for the app without granting global write access.

Suggested implementation:

```
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
WORKDIR /app

RUN groupadd -r app && useradd -r -g app app && \
    mkdir -p /data && chown app:app /data && chmod 750 /data

```

```
COPY --from=build /app/publish .

USER app

ENTRYPOINT ["dotnet", "Grimoire.Api.dll"]

```
</issue_to_address>

### Comment 2
<location path="docker-compose.yml" line_range="16-17" />
<code_context>
+      Cors__AllowedOrigins__0: "http://localhost:5173"
+    volumes:
+      - grimoire-data:/data
+    healthcheck:
+      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
+      interval: 10s
+      timeout: 5s
</code_context>
<issue_to_address>
**issue (bug_risk):** Healthcheck relies on `curl`, which may not be present in the runtime image.

The `mcr.microsoft.com/dotnet/aspnet` base image does not include `curl` by default, so this healthcheck will fail with `command not found` unless you install it. Either add `curl` to the final image or use a mechanism that’s already available in the container (e.g., `wget` if present, or a simple `/dev/tcp` shell check).
</issue_to_address>

### Comment 3
<location path="tests/Grimoire.IntegrationTests/Management/ApplicationsTests.cs" line_range="12-19" />
<code_context>
+    private HttpClient Client => factory.CreateManagementClient();
+
+    [Fact]
+    public async Task GetApplications_ReturnsEmptyListInitially()
+    {
+        var response = await Client.GetAsync("/api/management/applications");
+        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+        var json = JsonNode.Parse(await response.Content.ReadAsStringAsync())!.AsArray();
+        Assert.NotNull(json);
+    }
+
</code_context>
<issue_to_address>
**suggestion (testing):** Strengthen assertion to actually enforce an empty list as the method name describes.

This test name implies the response body should be an empty collection, but it only asserts `json` is non-null. To properly verify the initial state and prevent regressions, also assert that the array is empty, e.g. `Assert.Empty(json);` or `Assert.Equal(0, json.Count);`.

```suggestion
    [Fact]
    public async Task GetApplications_ReturnsEmptyListInitially()
    {
        var response = await Client.GetAsync("/api/management/applications");
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);

        var json = JsonNode.Parse(await response.Content.ReadAsStringAsync())!.AsArray();
        Assert.NotNull(json);
        Assert.Empty(json);
    }
```
</issue_to_address>

### Comment 4
<location path="tests/Grimoire.E2eTests/E2eTests.cs" line_range="94-98" />
<code_context>
+    }
+
+    [Fact]
+    public async Task RotateKey_OldKeyInvalid_NewKeyWorks()
+    {
+        var mgmt = fixture.CreateManagementClient();
+        var (slug, oldKey) = await CreateApplicationAsync(mgmt);
+
+        var rotateResp = await mgmt.PostAsync($"/api/management/applications/{slug}/rotate-key", null);
+        var rotateJson = JsonNode.Parse(await rotateResp.Content.ReadAsStringAsync())!;
+        var newKey = rotateJson["plainApiKey"]!.GetValue<string>();
+
+        // Old key should no longer work
</code_context>
<issue_to_address>
**suggestion (testing):** Assert the rotate-key response status code before parsing the body to avoid brittle failures.

In this E2E test, `rotateResp.Content` is parsed before confirming the response succeeded. If the endpoint returns a non-200 status (e.g. 500, 401), the test will fail with a JSON parsing error instead of a clear assertion. Add an explicit status assertion (e.g. `Assert.Equal(HttpStatusCode.OK, rotateResp.StatusCode);` or `rotateResp.EnsureSuccessStatusCode();`) before parsing `rotateJson` to keep the test’s intent and failure mode clear.

```suggestion
        var (slug, oldKey) = await CreateApplicationAsync(mgmt);

        var rotateResp = await mgmt.PostAsync($"/api/management/applications/{slug}/rotate-key", null);
        rotateResp.EnsureSuccessStatusCode();

        var rotateJson = JsonNode.Parse(await rotateResp.Content.ReadAsStringAsync())!;
        var newKey = rotateJson["plainApiKey"]!.GetValue<string>();
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click πŸ‘ or πŸ‘Ž on each comment and I'll use the feedback to improve your reviews.

Comment thread Dockerfile
Comment thread docker-compose.yml
Comment thread tests/Grimoire.IntegrationTests/Management/ApplicationsTests.cs
Comment thread tests/Grimoire.E2eTests/E2eTests.cs
@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown

Infisical secrets check: βœ… No secrets leaked!

πŸ’» Scan logs
2026-05-07T15:38:47Z INF scanning for exposed secrets...
3:38PM INF 19 commits scanned.
2026-05-07T15:38:47Z INF scan completed in 68.6ms
2026-05-07T15:38:47Z INF no leaks found

@sonarqubecloud

sonarqubecloud Bot commented May 7, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
2 Security Hotspots

See analysis details on SonarQube Cloud

@guibranco guibranco disabled auto-merge May 7, 2026 15:41
@guibranco guibranco merged commit 85f2605 into main May 7, 2026
13 of 15 checks passed
@guibranco guibranco deleted the feature/add-more-tests-and-docker-support branch May 7, 2026 15:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

β˜‘οΈ auto-merge Automatic merging of pull requests (gstraccini-bot)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant